鸿蒙HI3861模块中WiFi IoT智能家居套件 |
您所在的位置:网站首页 › hi3861 多线程 › 鸿蒙HI3861模块中WiFi IoT智能家居套件 |
[[353644]] 想了解更多内容,请访问: 51CTO和华为官方合作共建的鸿蒙技术社区 https://harmonyos.51cto.com/#zz 在HI3861模块中,UART2使用GPIO11和GPIO12管脚,串口通信一般是一个单片机最基本通信,我们一般调试的时候一个是点灯,另外一个就是打通串口 虽然目前的开发板已经有串口输出了(UART0),但是这个串口是官方自带的,我们还是要熟悉一下串口的使用过程。 GPIO11->UART2_TX GPIO12->UART2_RX 下面我们实现UART2的初始化,并将UART2接收到的数据从UART2发送出去。 硬件连接图 [[353645]]串口相关的函数如下: code\base\iot_hardware\frameworks\wifiiot_lite\src\wifiiot_uart.c //初始化函数 unsigned int UartInit(WifiIotUartIdx id, const WifiIotUartAttribute *param, const WifiIotUartExtraAttr *extraAttr) //读数据函数 int UartRead(WifiIotUartIdx id, unsigned char *data, unsigned int dataLen) //写数据函数 int UartWrite(WifiIotUartIdx id, const unsigned char *data, unsigned int dataLen)开发过程: 1. 使能UART2 在 vendor\hisi\hi3861\hi3861\build\config\usr_config.mk 修改 CONFIG_UART2_SUPPORT=y 2. 初始化GPIO为UART2(注意,如果已经执行步骤1,则不需要本过程) 如果已经配置 CONFIG_UART2_SUPPORT=y,则以下文件中的GPIO11,12会被自动初始化为UART2 vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c #ifdef CONFIG_UART2_SUPPORT /* uart2 sigma认证使用串口 */ hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_UART2_TXD); /* uart2 tx */ hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_UART2_RXD); /* uart2 rx */ #endif3. 初始化UART2配置 int usr_uart2_config(void) { int ret; //初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE WifiIotUartAttribute g_uart2_cfg = {115200, 8, 1, WIFI_IOT_UART_PARITY_NONE, 0}; ret = UartInit(WIFI_IOT_UART_IDX_2, &g_uart2_cfg,NULL); if (ret != 0) { printf("uart2 init fail\r\n"); } return ret; }4. 调用UART读写函数 unsigned char buff[50] = {0}; unsigned int len = 0; unsigned int ui = 0; len = UartRead(WIFI_IOT_UART_IDX_2, buff, 50);//接收串口2数据 if(len > 0) { printf("UART2 recv len=%d\r\n", len); for(ui = 0 ; ui UART2_TX GPIO12->UART2_RX 1. 在 vendor\hisi\hi3861\hi3861\build\config\usr_config.mk 修改 CONFIG_UART2_SUPPORT=y 2. 打开上面的宏定义后,在 vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c中会自动对 GPIO11和GPIO12进行初始化 //#ifdef CONFIG_UART2_SUPPORT // //uart2 sigma认证使用串口 // hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_UART2_TXD); // uart2 tx // hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_UART2_RXD); // uart2 rx //#endif //3.初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE //4.在任务中调用串口读写函数,收到什么数据,发送什么数据 */ int usr_uart2_config(void) { int ret; //初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE WifiIotUartAttribute g_uart2_cfg = {115200, 8, 1, WIFI_IOT_UART_PARITY_NONE, 0}; ret = UartInit(WIFI_IOT_UART_IDX_2, &g_uart2_cfg,NULL); if (ret != 0) { printf("uart2 init fail\r\n"); } return ret; } //1.任务处理函数 static void* Uart2Demo_Task(const char* arg) { unsigned char buff[50] = {0}; unsigned int len = 0; (void)arg; printf("[Uart2Demo] Uart2Demo_Task()\n"); GpioInit();//使用GPIO,都需要调用该接口 printf("UART2 init...\r\n"); usr_uart2_config(); while(1) { //logic code for task unsigned int ui = 0; len = UartRead(WIFI_IOT_UART_IDX_2, buff, 50);//接收串口2数据 if(len > 0) { printf("UART2 recv len=%d\r\n", len); for(ui = 0 ; ui |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |